var App = function () {

    //初始化
    //iCheck
    var _masterCheckbox;
    var _checkbox;
    //用于存放id数组
    var _idArray;
    //默认的Dropzone参数
    var defaultDropzoneOpts = {
        url: "",
        paramName:"dropFile",
        maxFiles: 1,// 一次性上传的文件数量上限
        maxFilesize: 2, // 文件大小，单位：MB
        acceptedFiles: ".jpg,.gif,.png,.jpeg", // 上传的类型
        addRemoveLinks: true,
        parallelUploads: 1,// 一次上传的文件数量
        //previewsContainer:"#preview", // 上传图片的预览窗口
        dictDefaultMessage: '拖动文件至此或者点击上传',
        dictMaxFilesExceeded: "您最多只能上传"+ this.maxFiles + "个文件！",
        dictResponseError: '文件上传失败!',
        dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
        dictFallbackMessage: "浏览器不受支持",
        dictFileTooBig: "文件过大上传文件最大支持.",
        dictRemoveLinks: "删除",
        dictCancelUpload: "取消"
    };

    /**
     * 初始化icheck
     */
    var handlerCheckbox = function () {
        //激活
        $('input[type="checkbox"].minimal, input[type="radio"].minimal').iCheck({
            checkboxClass: 'icheckbox_minimal-blue',
            radioClass   : 'iradio_minimal-blue'
        });

        //获取控制端Checkbox
        _masterCheckbox =  $('input[type="checkbox"].minimal.icheck_master');

        //获取全部Checkbox集合
        _checkbox = $('input[type="checkbox"].minimal');

    };

    /**
     * Checkbox全选功能
     */
    var handlerCheckedAll = function () {
        _masterCheckbox.on("ifClicked",function (e) {
            //返回true表示未选择，反之选中
            if (e.target.checked){
                _checkbox.iCheck("uncheck");
            }else{
                _checkbox.iCheck("check");
            }
        });
    }

    /**
     * 批量删除
     * @param url
     */
    var handlerDeleteMulti = function (url) {
        _idArray = new Array();

        //将选择元素id放进数组
        _checkbox.each(function () {
            var _id = $(this).attr("id");
            if (_id != null && _id != "undefine" && $(this).is(":checked")){
                _idArray.push(_id);
            }
        });

        //判断用户是否选择了数据项
        if(_idArray.length === 0 ){
            $("#modal-message").html("您还没有选择任何数据，请至少选择一项");
        }else {
            $("#modal-message").html("您确定删除该数据吗？");
        }
        //点击删除时，显示模态框
        $("#modal-default").modal("show");

        //如果用户选择了数据项，则调用删除方法
        $("#btnModalOk").bind("click",function () {
            handlerDeleteData(url);
        });

    }

    /**
     * 删除单个数据
     * @param url
     * @param id
     * @param msg
     */
    var handlerDeleteSingle = function (url,id,msg) {
        // 可选参数;意思：可传可不传
        if (!msg) msg = null;

        // 将 ID 放入数组中，以便和批量删除通用
        _idArray = new Array();
        _idArray.push(id);

        $("#modal-message").html(msg == null ? "您确定删除数据项吗？" : msg);
        $("#modal-default").modal("show");
        // 绑定删除事件
        $("#btnModalOk").bind("click", function () {
            handlerDeleteData(url);
        });
    }

    /**
     * Ajax异步删除
     * @param url
     */
    var handlerDeleteData = function (url) {
        $("#modal-default").modal("hide");
        if(_idArray.length > 0 ){
            setTimeout(function () {
                // //解绑
                $("#btnModalOk").unbind("click");

                $.ajax({
                    "url":url,
                    "type":"POST",
                    "dataType":"JSON",
                    "data":{"ids":_idArray.toString()},
                    "success":function (data) {
                        //请求成功后，无论失败与成功皆弹出模态框，所有这里需解绑
                        $("#btnModalOk").unbind("click");
                        //删除成功
                        if(data.status === 200){
                            // 刷新页面
                            $("#btnModalOk").bind("click", function () {
                                window.location.reload();
                            });
                        }
                        //删除失败
                        else{
                            //确定按钮事件改为隐藏模态框
                            $(".modal-title").html("错误");
                            $("#btnModalOk").bind("click",function () {
                                $("#modal-default").modal("hide");
                            });
                        }
                        //必须有提示信息，所以这里模态框必须调用
                        $("#modal-message").html(data.message);
                        $("#modal-default").modal("show");

                    }
                });
            },500);
        }
    }

    /**
     * 初始化 DataTables
     */
    var handlerInitDataTables = function (url,columns) {
        var _dataTable = $("#dataTable").DataTable({
            "paging":true,
            "info":true,
            "lengthChange":false,
            "searching":false,
            "ordering":false,
            "processing":true,
            "serverSide": true,
            "deferRender": true,
            "ajax": {
                "url": url
            },
            "columns": columns,
            "language": {
                "sProcessing": "处理中...",
                "sLengthMenu": "显示 _MENU_ 项结果",
                "sZeroRecords": "没有匹配结果",
                "sInfo": "显示第 _START_ 至 _END_ 项结果，共 _TOTAL_ 项",
                "sInfoEmpty": "显示第 0 至 0 项结果，共 0 项",
                "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
                "sInfoPostFix": "",
                "sSearch": "搜索:",
                "sUrl": "",
                "sEmptyTable": "表中数据为空",
                "sLoadingRecords": "载入中...",
                "sInfoThousands": ",",
                "oPaginate": {
                    "sFirst": "首页",
                    "sPrevious": "上页",
                    "sNext": "下页",
                    "sLast": "末页"
                },
                "oAria": {
                    "sSortAscending": ": 以升序排列此列",
                    "sSortDescending": ": 以降序排列此列"
                }
            },
            "drawCallback": function( settings ) {
                handlerCheckbox();
                handlerCheckedAll();
            }
        });
        return _dataTable;
    }

    /**
     * 查看详情
     * @param url
     */
    var handlerShowDetail = function (url) {
        //通过ajax请求html的方式将jsp装载在模态框
        $.ajax({
            url:url,
            type:"get",
            dataType:"html",
            success:function (data) {
                $("#modal-detail-body").html(data);
                $("#modal-detail").modal("show");
            }
        });
    }

    /**
     *  ZTree
     */
    var handlerInitZTree = function (url,autoParam,callback) {
        var setting = {
            view:{
                selectedMulti:false
            },
            async: {
                enable: true,
                url:url,
                autoParam:autoParam
            }
        };

        //初始化
        $.fn.zTree.init($("#myTree"), setting);

        $("#btnModalOk").bind("click",function () {
            var zTree = $.fn.zTree.getZTreeObj("myTree");
            var nodes = zTree.getSelectedNodes();

            //未选择
            if(nodes.length == 0){
                alert("请选择一个节点");
            }
            //已选择
            else{
                callback(nodes);
            }
        });
    };

    /**
     * 初始化Dropzone
     * @param opts
     */
    var handlerDropZone = function (opts) {

        //关闭Dropzone的自动发现功能
        Dropzone.autoDiscover = false;

        //继承
        $.extend(defaultDropzoneOpts,opts);

        new Dropzone(defaultDropzoneOpts.id, defaultDropzoneOpts);

        // Dropzone.options.dropz = {
        //     url: "/upload",
        //     paramName:"dropFile",
        //     dictDefaultMessage: '拖动文件至此或者点击上传',
        //     init:function () {
        //         this.on("success",function (file,data) {
        //             $("#pic").val(data.fileName);
        //         });
        //     }
        // };
    }

    return{
        /**
         * 初始化
         */
        init:function(){
            handlerCheckbox();
            handlerCheckedAll();
        },
        /**
         * 批量删除
         * @param url
         */
        deleteMulti:function (url) {
            handlerDeleteMulti(url);
        },
        /**
         * 删除单个数据
         * @param url
         * @param id
         * @param msg
         */
        deleteSingle:function(url,id,msg){
            handlerDeleteSingle(url,id,msg);
        },
        /**
         * 初始化DataTables
         * @param url
         * @param columns
         * @returns {*|jQuery}
         */
        initDataTables:function (url,columns) {
            return handlerInitDataTables(url,columns);
        },
        /**
         * 显示详情
         * @param url
         */
        showDetail:function (url) {
            handlerShowDetail(url);
        },
        /**
         * 初始化ZTree
         * @param url
         * @param autoParam
         * @param callback
         */
        initZTree:function (url,autoParam,callback) {
            handlerInitZTree(url,autoParam,callback);
        },
        /**
         * 初始化Dropzone
         * @param opts
         */
        initDropzone:function (opts) {
            handlerDropZone(opts);
        }
    }
}();

//激活
$(document).ready(function () {
    App.init();
});